Описание
Создает копию объекта Recordset, которая связана с
исходным объектом.
Set копия = оригинал.Clone
Параметры
копия
Объектная переменная, определяющая создаваемую
копию объекта Recordset.
оригинал
Объектная переменная,
задающая копируемый объект Recordset.
Замечания
Метод Clone используется для создания нескольких копий
объекта Recordset. Каждый объект Recordset может иметь свою
собственную текущую запись. Использование метода Clone само по себе не
вызывает изменения данных в объектах или изменения их структуры. С помощью
метода Clone создают общие взаимозаменяемые закладки для двух или
нескольких наборов записей.
Метод Clone применяют в том случае, когда
необходимо выполнить операцию с объектом Recordset, затрагивающую сразу
несколько текущих записей. Работа с копией объекта является более быстрой и
более эффективной, чем создание второго независимого объекта Recordset.
Набор записей, созданный с помощью метода Clone, первоначально не имеет
текущей записи. Для создания текущей записи перед использованием копии объекта
Recordset необходимо задать значение свойства Bookmark или
применить один из методов группы Move, один из методов группы Find
или метод Seek.
Применение метода Close к одному из объектов
(оригиналу или копии) не влияет на второй объект. Например, вызов Close
для исходного объекта Recordset не приводит к закрытию копии.
Закрытие
копии объекта Recordset с незавершенной транзакцией приводит к неявному
вызову метода Rollback.
При создании копии объекта Recordset
табличного типа в рабочей области ядра Microsoft Jet свойство
Index не копируется в новую копию объекта Recordset. Свойство
Index необходимо копировать явным образом.
Применение метода
Clone к объектам Recordset с последовательным доступом допускается
только в рабочей области ODBCDirect.
Пример
Следующая программа использует метод Clone для создания
копии объекта Recordset, после чего позволяет пользователю независимо
установить указатель записи в каждой копии.
Sub CloneX()
Dim dbsNorthwind As Database
Dim arstProducts(1 To 3) As Recordset
Dim intLoop As Integer
Dim strMessage As String
Dim strFind As String
Set dbsNorthwind = OpenDatabase("Борей.mdb")
' Если предполагается часть использовать инструкцию SQL,
' создание постоянного объекта QueryDef позволит
' увеличить быстродействие.
Set arstProducts(1) = dbsNorthwind.OpenRecordset( "SELECT Марка FROM Товары " & "ORDER BY Марка", dbOpenSnapshot)
' Создает две копии исходного объекта Recordset.
Set arstProducts(2) = arstProducts(1).Clone
Set arstProducts(3) = arstProducts(1).Clone
Do While True
' Выполняет цикл по массиву, в котором на каждом
' проходе ищется другая копия того же объекта
' Recordset.
For intLoop = 1 To 3
' Приглашает ввести строку поиска, показывая положение
' указателя текущей записи для каждого объекта Recordset.
strMessage = "Объекты Recordset для таблицы 'Товары':" & vbCr & " 1 - Оригинал - Указатель записи на " & _
arstProducts(1)!Марка & vbCr & " 2 - Копия - Указатель записи на " & _
arstProducts(2)!Марка & vbCr & " 3 - Копия - Указатель записи на " & _
arstProducts(3)!Марка & vbCr & "Введите строку поиска для #" & intLoop & ":"
strFind = Trim(InputBox(strMessage))
If strFind = "" Then Exit Do
' Находит строку поиска; при отсутствии совпадения
' переходит на последнюю запись.
With arstProducts(intLoop)
.FindFirst "Марка >= '" & strFind & "'"
If .NoMatch Then .MoveLast
End With
Next intLoop
Loop
arstProducts(1).Close
arstProducts(2).Close
arstProducts(3).Close
dbsNorthwind.Close
End Sub